Skip to content

Commit

Permalink
Organise and simplify translation of primitives
Browse files Browse the repository at this point in the history
  • Loading branch information
lpw25 committed Dec 22, 2017
1 parent a028138 commit 6284170
Show file tree
Hide file tree
Showing 12 changed files with 889 additions and 695 deletions.
69 changes: 42 additions & 27 deletions .depend
Expand Up @@ -670,36 +670,38 @@ bytecomp/translclass.cmx : typing/types.cmx typing/typeopt.cmx \
bytecomp/translclass.cmi : typing/typedtree.cmi parsing/location.cmi \
bytecomp/lambda.cmi typing/ident.cmi parsing/asttypes.cmi
bytecomp/translcore.cmo : typing/types.cmi typing/typeopt.cmi \
typing/typedtree.cmi typing/typecore.cmi bytecomp/translobj.cmi \
bytecomp/translattribute.cmi typing/primitive.cmi typing/predef.cmi \
typing/path.cmi typing/parmatch.cmi utils/misc.cmi bytecomp/matching.cmi \
parsing/longident.cmi parsing/location.cmi bytecomp/lambda.cmi \
typing/ident.cmi typing/env.cmi utils/config.cmi utils/clflags.cmi \
typing/btype.cmi parsing/asttypes.cmi bytecomp/translcore.cmi
typing/typedtree.cmi typing/typecore.cmi bytecomp/translprim.cmi \
bytecomp/translobj.cmi bytecomp/translattribute.cmi typing/primitive.cmi \
typing/predef.cmi typing/path.cmi typing/parmatch.cmi utils/misc.cmi \
bytecomp/matching.cmi parsing/longident.cmi parsing/location.cmi \
bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi utils/config.cmi \
utils/clflags.cmi typing/btype.cmi parsing/asttypes.cmi \
bytecomp/translcore.cmi
bytecomp/translcore.cmx : typing/types.cmx typing/typeopt.cmx \
typing/typedtree.cmx typing/typecore.cmx bytecomp/translobj.cmx \
bytecomp/translattribute.cmx typing/primitive.cmx typing/predef.cmx \
typing/path.cmx typing/parmatch.cmx utils/misc.cmx bytecomp/matching.cmx \
parsing/longident.cmx parsing/location.cmx bytecomp/lambda.cmx \
typing/ident.cmx typing/env.cmx utils/config.cmx utils/clflags.cmx \
typing/btype.cmx parsing/asttypes.cmi bytecomp/translcore.cmi
bytecomp/translcore.cmi : typing/types.cmi typing/typedtree.cmi \
typing/primitive.cmi typing/path.cmi parsing/location.cmi \
bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi parsing/asttypes.cmi
typing/typedtree.cmx typing/typecore.cmx bytecomp/translprim.cmx \
bytecomp/translobj.cmx bytecomp/translattribute.cmx typing/primitive.cmx \
typing/predef.cmx typing/path.cmx typing/parmatch.cmx utils/misc.cmx \
bytecomp/matching.cmx parsing/longident.cmx parsing/location.cmx \
bytecomp/lambda.cmx typing/ident.cmx typing/env.cmx utils/config.cmx \
utils/clflags.cmx typing/btype.cmx parsing/asttypes.cmi \
bytecomp/translcore.cmi
bytecomp/translcore.cmi : typing/typedtree.cmi typing/path.cmi \
parsing/location.cmi bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi \
parsing/asttypes.cmi
bytecomp/translmod.cmo : typing/types.cmi typing/typedtree.cmi \
bytecomp/translobj.cmi bytecomp/translcore.cmi bytecomp/translclass.cmi \
bytecomp/translattribute.cmi typing/printtyp.cmi typing/primitive.cmi \
typing/predef.cmi typing/path.cmi typing/mtype.cmi utils/misc.cmi \
parsing/longident.cmi parsing/location.cmi bytecomp/lambda.cmi \
typing/ident.cmi typing/env.cmi typing/ctype.cmi utils/clflags.cmi \
parsing/asttypes.cmi bytecomp/translmod.cmi
bytecomp/translprim.cmi bytecomp/translobj.cmi bytecomp/translcore.cmi \
bytecomp/translclass.cmi bytecomp/translattribute.cmi typing/printtyp.cmi \
typing/primitive.cmi typing/predef.cmi typing/path.cmi typing/mtype.cmi \
utils/misc.cmi parsing/longident.cmi parsing/location.cmi \
bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi typing/ctype.cmi \
utils/clflags.cmi parsing/asttypes.cmi bytecomp/translmod.cmi
bytecomp/translmod.cmx : typing/types.cmx typing/typedtree.cmx \
bytecomp/translobj.cmx bytecomp/translcore.cmx bytecomp/translclass.cmx \
bytecomp/translattribute.cmx typing/printtyp.cmx typing/primitive.cmx \
typing/predef.cmx typing/path.cmx typing/mtype.cmx utils/misc.cmx \
parsing/longident.cmx parsing/location.cmx bytecomp/lambda.cmx \
typing/ident.cmx typing/env.cmx typing/ctype.cmx utils/clflags.cmx \
parsing/asttypes.cmi bytecomp/translmod.cmi
bytecomp/translprim.cmx bytecomp/translobj.cmx bytecomp/translcore.cmx \
bytecomp/translclass.cmx bytecomp/translattribute.cmx typing/printtyp.cmx \
typing/primitive.cmx typing/predef.cmx typing/path.cmx typing/mtype.cmx \
utils/misc.cmx parsing/longident.cmx parsing/location.cmx \
bytecomp/lambda.cmx typing/ident.cmx typing/env.cmx typing/ctype.cmx \
utils/clflags.cmx parsing/asttypes.cmi bytecomp/translmod.cmi
bytecomp/translmod.cmi : typing/typedtree.cmi typing/primitive.cmi \
parsing/location.cmi bytecomp/lambda.cmi typing/ident.cmi
bytecomp/translobj.cmo : typing/primitive.cmi utils/misc.cmi \
Expand All @@ -711,6 +713,19 @@ bytecomp/translobj.cmx : typing/primitive.cmx utils/misc.cmx \
typing/ident.cmx typing/env.cmx utils/config.cmx utils/clflags.cmx \
typing/btype.cmx parsing/asttypes.cmi bytecomp/translobj.cmi
bytecomp/translobj.cmi : bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi
bytecomp/translprim.cmo : typing/types.cmi typing/typeopt.cmi \
typing/typedtree.cmi typing/primitive.cmi typing/predef.cmi \
typing/path.cmi utils/misc.cmi bytecomp/matching.cmi parsing/location.cmi \
bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi utils/config.cmi \
utils/clflags.cmi parsing/asttypes.cmi bytecomp/translprim.cmi
bytecomp/translprim.cmx : typing/types.cmx typing/typeopt.cmx \
typing/typedtree.cmx typing/primitive.cmx typing/predef.cmx \
typing/path.cmx utils/misc.cmx bytecomp/matching.cmx parsing/location.cmx \
bytecomp/lambda.cmx typing/ident.cmx typing/env.cmx utils/config.cmx \
utils/clflags.cmx parsing/asttypes.cmi bytecomp/translprim.cmi
bytecomp/translprim.cmi : typing/types.cmi typing/typedtree.cmi \
typing/primitive.cmi typing/path.cmi parsing/location.cmi \
bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi
asmcomp/CSE.cmo : asmcomp/mach.cmi asmcomp/CSEgen.cmi asmcomp/arch.cmo
asmcomp/CSE.cmx : asmcomp/mach.cmx asmcomp/CSEgen.cmx asmcomp/arch.cmx
asmcomp/CSEgen.cmo : asmcomp/reg.cmi asmcomp/proc.cmi asmcomp/mach.cmi \
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -117,7 +117,7 @@ COMP=bytecomp/lambda.cmo bytecomp/printlambda.cmo \
bytecomp/semantics_of_primitives.cmo \
bytecomp/switch.cmo bytecomp/matching.cmo \
bytecomp/translobj.cmo bytecomp/translattribute.cmo \
bytecomp/translcore.cmo \
bytecomp/translprim.cmo bytecomp/translcore.cmo \
bytecomp/translclass.cmo bytecomp/translmod.cmo \
bytecomp/simplif.cmo bytecomp/runtimedef.cmo \
bytecomp/meta.cmo bytecomp/opcodes.cmo \
Expand Down
34 changes: 0 additions & 34 deletions bytecomp/lambda.ml
Expand Up @@ -27,13 +27,6 @@ type compile_time_constant =
| Ostype_cygwin
| Backend_type

type loc_kind =
| Loc_FILE
| Loc_LINE
| Loc_MODULE
| Loc_LOC
| Loc_POS

type immediate_or_pointer =
| Immediate
| Pointer
Expand All @@ -54,7 +47,6 @@ type primitive =
| Pignore
| Prevapply
| Pdirapply
| Ploc of loc_kind
(* Globals *)
| Pgetglobal of Ident.t
| Psetglobal of Ident.t
Expand All @@ -68,7 +60,6 @@ type primitive =
| Psetfloatfield of int * initialization_or_assignment
| Pduprecord of Types.record_representation * int
(* Force lazy values *)
| Plazyforce
(* External call *)
| Pccall of Primitive.description
(* Exceptions *)
Expand Down Expand Up @@ -681,31 +672,6 @@ let raise_kind = function
| Raise_reraise -> "reraise"
| Raise_notrace -> "raise_notrace"

let lam_of_loc kind loc =
let loc_start = loc.Location.loc_start in
let (file, lnum, cnum) = Location.get_pos_info loc_start in
let enum = loc.Location.loc_end.Lexing.pos_cnum -
loc_start.Lexing.pos_cnum + cnum in
match kind with
| Loc_POS ->
Lconst (Const_block (0, [
Const_immstring file;
Const_base (Const_int lnum);
Const_base (Const_int cnum);
Const_base (Const_int enum);
]))
| Loc_FILE -> Lconst (Const_immstring file)
| Loc_MODULE ->
let filename = Filename.basename file in
let name = Env.get_unit_name () in
let module_name = if name = "" then "//"^filename^"//" else name in
Lconst (Const_immstring module_name)
| Loc_LOC ->
let loc = Printf.sprintf "File %S, line %d, characters %d-%d"
file lnum cnum enum in
Lconst (Const_immstring loc)
| Loc_LINE -> Lconst (Const_base (Const_int lnum))

let merge_inline_attributes attr1 attr2 =
match attr1, attr2 with
| Default_inline, _ -> Some attr2
Expand Down
11 changes: 0 additions & 11 deletions bytecomp/lambda.mli
Expand Up @@ -27,13 +27,6 @@ type compile_time_constant =
| Ostype_cygwin
| Backend_type

type loc_kind =
| Loc_FILE
| Loc_LINE
| Loc_MODULE
| Loc_LOC
| Loc_POS

type immediate_or_pointer =
| Immediate
| Pointer
Expand All @@ -59,7 +52,6 @@ type primitive =
| Pignore
| Prevapply
| Pdirapply
| Ploc of loc_kind
(* Globals *)
| Pgetglobal of Ident.t
| Psetglobal of Ident.t
Expand All @@ -72,8 +64,6 @@ type primitive =
| Pfloatfield of int
| Psetfloatfield of int * initialization_or_assignment
| Pduprecord of Types.record_representation * int
(* Force lazy values *)
| Plazyforce
(* External call *)
| Pccall of Primitive.description
(* Exceptions *)
Expand Down Expand Up @@ -362,7 +352,6 @@ val is_guarded: lambda -> bool
val patch_guarded : lambda -> lambda -> lambda

val raise_kind: raise_kind -> string
val lam_of_loc : loc_kind -> Location.t -> lambda

val merge_inline_attributes
: inline_attribute
Expand Down
11 changes: 0 additions & 11 deletions bytecomp/printlambda.ml
Expand Up @@ -109,13 +109,6 @@ let record_rep ppf r =
| Record_extension -> fprintf ppf "ext"
;;

let string_of_loc_kind = function
| Loc_FILE -> "loc_FILE"
| Loc_LINE -> "loc_LINE"
| Loc_MODULE -> "loc_MODULE"
| Loc_POS -> "loc_POS"
| Loc_LOC -> "loc_LOC"

let block_shape ppf shape = match shape with
| None | Some [] -> ()
| Some l when List.for_all ((=) Pgenval) l -> ()
Expand All @@ -135,7 +128,6 @@ let primitive ppf = function
| Pignore -> fprintf ppf "ignore"
| Prevapply -> fprintf ppf "revapply"
| Pdirapply -> fprintf ppf "dirapply"
| Ploc kind -> fprintf ppf "%s" (string_of_loc_kind kind)
| Pgetglobal id -> fprintf ppf "global %a" Ident.print id
| Psetglobal id -> fprintf ppf "setglobal %a" Ident.print id
| Pmakeblock(tag, Immutable, shape) ->
Expand Down Expand Up @@ -180,7 +172,6 @@ let primitive ppf = function
in
fprintf ppf "setfloatfield%s %i" init n
| Pduprecord (rep, size) -> fprintf ppf "duprecord %a %i" record_rep rep size
| Plazyforce -> fprintf ppf "force"
| Pccall p -> fprintf ppf "%s" p.prim_name
| Praise k -> fprintf ppf "%s" (Lambda.raise_kind k)
| Psequand -> fprintf ppf "&&"
Expand Down Expand Up @@ -334,7 +325,6 @@ let name_of_primitive = function
| Pignore -> "Pignore"
| Prevapply -> "Prevapply"
| Pdirapply -> "Pdirapply"
| Ploc _ -> "Ploc"
| Pgetglobal _ -> "Pgetglobal"
| Psetglobal _ -> "Psetglobal"
| Pmakeblock _ -> "Pmakeblock"
Expand All @@ -345,7 +335,6 @@ let name_of_primitive = function
| Pfloatfield _ -> "Pfloatfield"
| Psetfloatfield _ -> "Psetfloatfield"
| Pduprecord _ -> "Pduprecord"
| Plazyforce -> "Plazyforce"
| Pccall _ -> "Pccall"
| Praise _ -> "Praise"
| Psequand -> "Psequand"
Expand Down
4 changes: 0 additions & 4 deletions bytecomp/semantics_of_primitives.ml
Expand Up @@ -35,7 +35,6 @@ let for_primitive (prim : Lambda.primitive) =
( "caml_format_float" | "caml_format_int" | "caml_int32_format"
| "caml_nativeint_format" | "caml_int64_format" ) } ->
No_effects, No_coeffects
| Plazyforce
| Pccall _ -> Arbitrary_effects, Has_coeffects
| Praise _ -> Arbitrary_effects, No_coeffects
| Pnot
Expand Down Expand Up @@ -143,9 +142,6 @@ let for_primitive (prim : Lambda.primitive) =
| Pbbswap _ -> No_effects, No_coeffects
| Pint_as_pointer -> No_effects, No_coeffects
| Popaque -> Arbitrary_effects, Has_coeffects
| Ploc _ ->
(* Removed by [Translcore]. *)
No_effects, No_coeffects
| Prevapply
| Pdirapply ->
(* Removed by [Simplif], but there is no reason to prevent using
Expand Down

0 comments on commit 6284170

Please sign in to comment.