Skip to content

Commit

Permalink
fix #515
Browse files Browse the repository at this point in the history
  • Loading branch information
Hongbo Zhang committed Jul 13, 2016
1 parent 8150db8 commit fd8950a
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 30 deletions.
27 changes: 11 additions & 16 deletions jscomp/common/js_config.ml
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,17 @@ let (//) = Filename.concat

let get_packages_info () = !packages_info

type info_query = [ `Empty | `Found of package_name * string | `NotFound ]
type info_query =
[ `Empty
| `Package_script of string
| `Found of package_name * string
| `NotFound ]
let query_package_infos package_infos module_system =
match package_infos with
| Browser ->
assert false
| Empty -> `Empty
| NonBrowser (name, []) -> `Package_script name
| NonBrowser (name, paths) ->
begin match List.find (fun (k, _) -> k = module_system) paths with
| (_, x) -> `Found (name, x)
Expand All @@ -140,32 +145,22 @@ let get_current_package_name_and_path module_system =
(* for a single pass compilation, [output_dir]
can be cached
*)
let get_output_dir kind filename =
let get_output_dir module_system filename =
match !packages_info with
| Empty | Browser ->
| Empty | Browser | NonBrowser (_, [])->
if Filename.is_relative filename then
Lazy.force Ext_filename.cwd //
Filename.dirname filename
else
Filename.dirname filename
| NonBrowser (_, modules) ->
begin match List.find (fun (k,_) -> k = kind) modules with
| (_, x) -> Lazy.force Ext_filename.package_dir // x
| exception _ -> assert false
begin match List.find (fun (k,_) -> k = module_system) modules with
| (_, _path) -> Lazy.force Ext_filename.package_dir // _path
| exception _ -> assert false
end





(* Note that we can have different [basename] when passed
to many files
*)
let get_output_file kind filename =
let basename = Filename.basename filename in
Filename.concat (get_output_dir kind filename)
(Ext_filename.chop_extension ~loc:__LOC__ basename ^ get_ext())


let default_gen_tds = ref false

Expand Down
17 changes: 12 additions & 5 deletions jscomp/common/js_config.mli
Original file line number Diff line number Diff line change
Expand Up @@ -47,29 +47,36 @@ val set_browser : unit -> unit

val get_ext : unit -> string

(** depends on [package_infos] *)
val get_output_file : module_system -> string -> string

(** depends on [package_infos], used in {!Js_program_loader} *)
val get_output_dir : module_system -> string -> string


(** used by command line option *)
val set_npm_package_path : string -> unit
val get_packages_info : unit -> packages_info

type info_query = [ `Empty | `Found of package_name * string | `NotFound ]
type info_query =
[ `Empty
| `Package_script of string
| `Found of package_name * string
| `NotFound
]

val query_package_infos :
packages_info ->
module_system ->
info_query



(** set/get header *)
val no_version_header : bool ref


(** return [package_name] and [path] *)
(** return [package_name] and [path]
when in script mode:
*)

val get_current_package_name_and_path :
module_system -> info_query

Expand Down
24 changes: 19 additions & 5 deletions jscomp/js_program_loader.ml
Original file line number Diff line number Diff line change
Expand Up @@ -93,25 +93,39 @@ let string_of_module_id (module_system : Lam_module_ident.system)
file !Location.input_name
| `Goog , `Found (package_name, x), _ ->
package_name ^ "." ^ String.uncapitalize id.name
| `Goog, `Empty, _ ->
| `Goog, (`Empty | `Package_script _), _
->
Ext_pervasives.failwithf ~loc:__LOC__
"@[%s was not compiled with goog support in search path - while compiling %s @] "
file !Location.input_name
| (`AmdJS | `NodeJS), `Empty , `Found _ ->
| (`AmdJS | `NodeJS),
( `Empty | `Package_script _) ,
`Found _ ->
Ext_pervasives.failwithf ~loc:__LOC__
"@[dependency %s was compiled in script mode - while compiling %s in package mode @]"
file !Location.input_name
| _ , _, `NotFound -> assert false
| (`AmdJS | `NodeJS), `Found(package_name, x), `Found(current_package, path) ->
| (`AmdJS | `NodeJS),
`Found(package_name, x),
`Found(current_package, path) ->
if current_package = package_name then
rebase (`File (
Lazy.force Ext_filename.package_dir // x // modulename))
else
package_name // x // modulename

| (`AmdJS | `NodeJS), `Found(package_name, x),
`Package_script(current_package)
->
if current_package = package_name then
rebase (`File (
Lazy.force Ext_filename.package_dir // x // modulename))
else
package_name // x // modulename
| (`AmdJS | `NodeJS), `Found(package_name, x), `Empty
-> package_name // x // modulename
| (`AmdJS | `NodeJS), `Empty , `Empty
| (`AmdJS | `NodeJS),
(`Empty | `Package_script _) ,
(`Empty | `Package_script _)
->
begin match Config_util.find file with
| file ->
Expand Down
26 changes: 22 additions & 4 deletions jscomp/lam_compile_group.ml
Original file line number Diff line number Diff line change
Expand Up @@ -424,24 +424,42 @@ let lambda_as_module
Js_config.set_current_file filename ;
Js_config.iset_debug_file "tuple_alloc.ml";
let lambda_output = compile ~filename output_prefix false env sigs lam in
let (//) = Filename.concat in
let basename =
Ext_filename.chop_extension ~loc:__LOC__
(Filename.basename filename) ^ Js_config.get_ext() in
(* Not re-entrant *)
match Js_config.get_packages_info () with
| Browser -> ()
| Empty ->
| Empty
| NonBrowser (_, []) ->
(* script mode *)
let output_filename =
(if Filename.is_relative filename then
Lazy.force Ext_filename.cwd //
Filename.dirname filename
else
Filename.dirname filename) // basename
in
Ext_pervasives.with_file_as_chan
(Js_config.get_output_file `NodeJS filename)
output_filename
(fun chan ->
Js_dump.dump_deps_program `NodeJS lambda_output chan)

| NonBrowser (_package_name, module_systems) ->
module_systems |> List.iter begin fun (module_system, _path) ->
let output_filename =
Lazy.force Ext_filename.package_dir //
_path //
basename
in
Ext_pervasives.with_file_as_chan
(Js_config.get_output_file module_system filename)
output_filename
(fun chan ->
Js_dump.dump_deps_program
(module_system :> [Js_config.module_system | `Browser])
lambda_output
chan)
chan)
end
end
(* We can use {!Env.current_unit = "Pervasives"} to tell if it is some specific module,
Expand Down

0 comments on commit fd8950a

Please sign in to comment.