Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

camlp4 et location bidon #8290

Closed
vicuna opened this issue Sep 18, 2003 · 3 comments
Closed

camlp4 et location bidon #8290

vicuna opened this issue Sep 18, 2003 · 3 comments
Labels

Comments

@vicuna
Copy link

vicuna commented Sep 18, 2003

Original bug ID: 1841
Reporter: administrator
Status: closed
Resolution: not a bug
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)

Bug description

Hello,

Comment est-on censé faire en Camlp4 pour ajouter des str_item qui ne
correspondent à rien dans le source?

Par exemple, on peut faire ça:

let () =
let old_parse_implem = !Pcaml.parse_implem in
let new_parse_implem s =
let (items,d) = old_parse_implem s in
let loc = (-1,-1) in
(<:str_item< declare $list:[]$ end >>, loc) :: items, d
in
Pcaml.parse_implem := new_parse_implem

Ça marche quand on utilise pr_dump, mais pas avec pr_o. Par exemple sur
un fichier x.ml qui est:

--x.ml--
let x = 1

La sortie est:

(* *)llet x = 1

Il y a un l en trop. En fait, c'est la premiere lettre du fichier qui est
recopiée partout où le pretty-printer veut afficher un str_item
pour lequel loc = (-1,-1). Soit c'est un bug de pr_o, soit il y une valeur
de loc qui évite le probleme... J'ai essayé avec (0,0), (0,-1), sans
succès.

Si je rajoute un -sep "" comme argument à pr_o, je contourne le problème.

À vue de nez, je dirais qu'il faut modifier dans pr_o le List.fold_left
qui appelle copy_source (dans apply_printer), pour traiter le cas
bp=ep=-1 à part.

-- Alain

@vicuna
Copy link
Author

vicuna commented Oct 2, 2003

Comment author: administrator

Salut Alain,

Si je reproduis ton exemple avec loc = (0,0), j'obtiens ce que (je
crois que) tu veux:

  $ cat ./x.ml
  let x = 1
  $ camlp4o pr_o.cmo ./bar.cmo -- ./x.ml
  (* *)let x = 1

où ./bar.cmo est ton code ci-dessous où loc vaut (0,0), et
ocaml+camlp4 du CVS (et j'ai rien changé dans le code de
pr_o.ml). J'obtiens bien le comportement que tu décris avec (-1,-1),
mais puisque ce sont des locations négatives, on peut considèrer que
le comportement est, disons, indéfini. J'ai aussi fait d'autres
essais, et (0,0) semble être le seul couple qui fait ce que tu veux.

Ai-je raté qque chose?

-- Michel

Alain.Frisch@ens.fr wrote/écrivait (Thu, Sep 18, 2003 at 11:37:01PM +0200):

Hello,

Comment est-on censé faire en Camlp4 pour ajouter des str_item qui ne
correspondent à rien dans le source?

Par exemple, on peut faire ça:

let () =
let old_parse_implem = !Pcaml.parse_implem in
let new_parse_implem s =
let (items,d) = old_parse_implem s in
let loc = (-1,-1) in
(<:str_item< declare $list:[]$ end >>, loc) :: items, d
in
Pcaml.parse_implem := new_parse_implem

Ça marche quand on utilise pr_dump, mais pas avec pr_o. Par exemple sur
un fichier x.ml qui est:

--x.ml--
let x = 1

La sortie est:

(* *)llet x = 1

Il y a un l en trop. En fait, c'est la premiere lettre du fichier qui est
recopiée partout où le pretty-printer veut afficher un str_item
pour lequel loc = (-1,-1). Soit c'est un bug de pr_o, soit il y une valeur
de loc qui évite le probleme... J'ai essayé avec (0,0), (0,-1), sans
succès.

Si je rajoute un -sep "" comme argument à pr_o, je contourne le problème.

À vue de nez, je dirais qu'il faut modifier dans pr_o le List.fold_left
qui appelle copy_source (dans apply_printer), pour traiter le cas
bp=ep=-1 à part.

-- Alain

@vicuna
Copy link
Author

vicuna commented Oct 2, 2003

Comment author: administrator

On Thu, 2 Oct 2003, Michel Mauny wrote:

Si je reproduis ton exemple avec loc = (0,0), j'obtiens ce que (je
crois que) tu veux:
...
Ai-je raté qque chose?

Ah euh oui, en effet, ça marche. Je pensais bien avoir essayé (0,0) sans
succès. Désolé pour le derangement...

-- Alain

@vicuna
Copy link
Author

vicuna commented Oct 3, 2003

Comment author: administrator

Ca marche bien avec loc = (0,0).

@vicuna vicuna closed this as completed Oct 3, 2003
@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant