Skip to content

Commit

Permalink
Merge branch 'development' into genpy
Browse files Browse the repository at this point in the history
Conflicts:
	.gitignore
	.travis.yml
	Makefile
	tests/RunTravis.hx
	tests/sys/src/Main.hx
	tests/sys/testsys.hxproj
  • Loading branch information
Simn committed Apr 24, 2014
2 parents 41bc47a + 9bea7cb commit a1fedbb
Show file tree
Hide file tree
Showing 61 changed files with 1,012 additions and 297 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,5 @@ tests/optimization/testopt.js
tests/unit/unit.py
tests/unit/unit.py.res1.txt
tests/unit/unit.py.res2.bin
*.cmo
tests/sys/bin/
10 changes: 9 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,19 @@ env:
matrix:
- TARGET=python
- TARGET=polygonal-ds
- TARGET=flambe
- TARGET=hxtemplo
- TARGET=munit
- TARGET=openfl-samples
- TARGET=flixel-demos
- TARGET=neko-sys
- TARGET=bytecode

matrix:
fast_finish: true
allow_failures:
- env: TARGET=flash8
- env: TARGET=flixel-demos

before_install:
- travis_retry sudo apt-get update
Expand All @@ -22,7 +30,7 @@ before_install:
- cd ~/neko && make && sudo make install && cd $TRAVIS_BUILD_DIR

script:
- make
- /bin/sh -c '[ $TARGET = "bytecode" ] && make BYTECODE=1 || make'
- make tools
- sudo make install
- cd tests/
Expand Down
138 changes: 79 additions & 59 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,44 @@ OUTPUT=haxe
EXTENSION=
OCAMLOPT=ocamlopt
OCAMLC=ocamlc
LFLAGS=

CFLAGS= -g -I libs/extlib -I libs/extc -I libs/neko -I libs/javalib -I libs/ziplib -I libs/swflib -I libs/xml-light -I libs/ttflib -I libs/ilib -I libs/objsize

CC_CMD = $(OCAMLOPT) $(CFLAGS) -c $<
CC_PARSER_CMD = $(OCAMLOPT) -pp camlp4o $(CFLAGS) -c parser.ml

LIBS=unix.cmxa str.cmxa libs/extlib/extLib.cmxa libs/xml-light/xml-light.cmxa libs/swflib/swflib.cmxa \
libs/extc/extc.cmxa libs/neko/neko.cmxa libs/javalib/java.cmxa libs/ziplib/zip.cmxa \
libs/ttflib/ttf.cmxa libs/ilib/il.cmxa libs/objsize/objsize.cmxa
LIBS=unix str libs/extlib/extLib libs/xml-light/xml-light libs/swflib/swflib \
libs/extc/extc libs/neko/neko libs/javalib/java libs/ziplib/zip \
libs/ttflib/ttf libs/ilib/il libs/objsize/objsize

NATIVE_LIBS=-cclib libs/extc/extc_stubs.o -cclib -lz -cclib libs/objsize/c_objsize.o

ifeq ($(BYTECODE),1)
TARGET_FLAG = bytecode
CC_CMD = $(OCAMLC)
LIB_EXT = cma
MODULE_EXT = cmo
NATIVE_LIB_FLAG = -custom
else
TARGET_FLAG = native
CC_CMD = $(OCAMLOPT)
LIB_EXT = cmxa
MODULE_EXT = cmx
endif

CC_PARSER_CMD = $(CC_CMD) -pp camlp4o $(CFLAGS) -c parser.ml

RELDIR=../../..

MODULES=ast type lexer common genxml parser typecore optimizer typeload \
codegen gencommon genas3 gencpp genjs genneko genphp genswf8 \
codegen gencommon genas3 gencpp genjs genneko genphp genswf8 \
genswf9 genswf genjava gencs genpy interp dce filters typer matcher version main

ADD_REVISION=0

# using $(CURDIR) on Windows will not work since it might be a Cygwin path
ifdef SYSTEMROOT
EXTENSION=.exe
EXTENSION=.exe
else
export HAXE_STD_PATH=$(CURDIR)/std
export HAXE_STD_PATH=$(CURDIR)/std
endif

ifneq ($(ADD_REVISION),0)
Expand All @@ -53,24 +66,20 @@ endif

all: libs haxe

version.cmx:
echo $(VERSION_EXTRA) > version.ml
$(OCAMLOPT) $(CFLAGS) -c version.ml

libs:
make -C libs/extlib opt OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/extc native OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/neko OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/javalib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/ilib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/ziplib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/swflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/xml-light xml-light.cmxa OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/ttflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
make -C libs/objsize OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)

haxe: $(MODULES:=.cmx)
$(OCAMLOPT) -o $(OUTPUT) $(NATIVE_LIBS) $(LIBS) $(MODULES:=.cmx)
make -C libs/extlib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/extc OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/neko OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/javalib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/ilib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/ziplib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/swflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/xml-light OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/ttflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
make -C libs/objsize OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)

haxe: $(MODULES:=.$(MODULE_EXT))
$(CC_CMD) -o $(OUTPUT) $(NATIVE_LIBS) $(NATIVE_LIB_FLAG) $(LFLAGS) $(LIBS:=.$(LIB_EXT)) $(MODULES:=.$(MODULE_EXT))

haxelib:
(cd $(CURDIR)/extra/haxelib_src && $(CURDIR)/$(OUTPUT) haxelib.hxml && nekotools boot bin/haxelib.n)
Expand Down Expand Up @@ -103,63 +112,72 @@ install_tools: tools
uninstall:
rm -rf $(INSTALL_BIN_DIR)/haxe $(INSTALL_BIN_DIR)/haxelib $(INSTALL_LIB_DIR)

codegen.cmx: optimizer.cmx typeload.cmx typecore.cmx type.cmx genxml.cmx common.cmx ast.cmx
# Modules

codegen.$(MODULE_EXT): optimizer.$(MODULE_EXT) typeload.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) genxml.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)

common.cmx: type.cmx ast.cmx
common.$(MODULE_EXT): type.$(MODULE_EXT) ast.$(MODULE_EXT)

dce.cmx: ast.cmx common.cmx codegen.cmx type.cmx
dce.$(MODULE_EXT): ast.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) type.$(MODULE_EXT)

filters.cmx: ast.cmx common.cmx type.cmx dce.cmx codegen.cmx typecore.cmx
filters.$(MODULE_EXT): ast.$(MODULE_EXT) common.$(MODULE_EXT) type.$(MODULE_EXT) dce.$(MODULE_EXT) codegen.$(MODULE_EXT) typecore.$(MODULE_EXT)

genas3.cmx: type.cmx common.cmx codegen.cmx ast.cmx
genas3.$(MODULE_EXT): type.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

gencommon.cmx: type.cmx common.cmx codegen.cmx ast.cmx
gencommon.$(MODULE_EXT): type.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

gencpp.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
gencpp.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

gencs.cmx: type.cmx lexer.cmx gencommon.cmx common.cmx codegen.cmx ast.cmx
gencs.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) gencommon.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genjava.cmx: type.cmx gencommon.cmx common.cmx codegen.cmx ast.cmx
genjava.$(MODULE_EXT): type.$(MODULE_EXT) gencommon.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genjs.cmx: type.cmx optimizer.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
genjs.$(MODULE_EXT): type.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genneko.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
genneko.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genphp.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
genphp.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genpy.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
genpy.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genswf.cmx: type.cmx genswf9.cmx genswf8.cmx common.cmx ast.cmx
genswf.$(MODULE_EXT): type.$(MODULE_EXT) genswf9.$(MODULE_EXT) genswf8.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)

genswf8.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
genswf8.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genswf9.cmx: type.cmx lexer.cmx genswf8.cmx common.cmx codegen.cmx ast.cmx
genswf9.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) genswf8.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)

genxml.cmx: type.cmx lexer.cmx common.cmx ast.cmx
genxml.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)

interp.cmx: typecore.cmx type.cmx lexer.cmx genneko.cmx common.cmx codegen.cmx ast.cmx genswf.cmx genjava.cmx parser.cmx
interp.$(MODULE_EXT): typecore.$(MODULE_EXT) type.$(MODULE_EXT) lexer.$(MODULE_EXT) genneko.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) genswf.$(MODULE_EXT) genjava.$(MODULE_EXT) parser.$(MODULE_EXT)

matcher.cmx: optimizer.cmx codegen.cmx typecore.cmx type.cmx typer.cmx common.cmx ast.cmx
matcher.$(MODULE_EXT): optimizer.$(MODULE_EXT) codegen.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) typer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)

main.cmx: filters.cmx matcher.cmx typer.cmx typeload.cmx typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx interp.cmx genxml.cmx genswf.cmx genphp.cmx genneko.cmx genjs.cmx gencpp.cmx genas3.cmx common.cmx codegen.cmx ast.cmx gencommon.cmx genjava.cmx gencs.cmx genpy.cmx version.cmx
main.$(MODULE_EXT): filters.$(MODULE_EXT) matcher.$(MODULE_EXT) typer.$(MODULE_EXT) typeload.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) interp.$(MODULE_EXT) genxml.$(MODULE_EXT) genswf.$(MODULE_EXT) genphp.$(MODULE_EXT) genneko.$(MODULE_EXT) genjs.$(MODULE_EXT) gencpp.$(MODULE_EXT) genas3.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) gencommon.$(MODULE_EXT) genjava.$(MODULE_EXT) gencs.$(MODULE_EXT) genpy.$(MODULE_EXT) version.$(MODULE_EXT)

optimizer.cmx: typecore.cmx type.cmx parser.cmx common.cmx ast.cmx
optimizer.$(MODULE_EXT): typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)

parser.cmx: parser.ml lexer.cmx common.cmx ast.cmx
parser.$(MODULE_EXT): parser.ml lexer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
$(CC_PARSER_CMD)

type.cmx: ast.cmx
type.$(MODULE_EXT): ast.$(MODULE_EXT)

typecore.$(MODULE_EXT): type.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)

typecore.cmx: type.cmx common.cmx ast.cmx
typeload.$(MODULE_EXT): typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)

typeload.cmx: typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx common.cmx ast.cmx
typer.$(MODULE_EXT): typeload.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) interp.$(MODULE_EXT) genneko.$(MODULE_EXT) genjs.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) filters.$(MODULE_EXT)

typer.cmx: typeload.cmx typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx interp.cmx genneko.cmx genjs.cmx common.cmx codegen.cmx ast.cmx filters.cmx
lexer.$(MODULE_EXT): lexer.ml

lexer.cmx: lexer.ml
lexer.$(MODULE_EXT): ast.$(MODULE_EXT)

lexer.cmx: ast.cmx
ast.$(MODULE_EXT):

version.$(MODULE_EXT):
echo $(VERSION_EXTRA) > version.ml
$(CC_CMD) $(CFLAGS) -c version.ml

# Clean

clean: clean_libs clean_haxe clean_tools

Expand All @@ -173,21 +191,23 @@ clean_libs:
make -C libs/swflib clean
make -C libs/xml-light clean
make -C libs/ttflib clean
make -C libs/objsize clean

clean_haxe:
rm -f $(MODULES:=.obj) $(MODULES:=.o) $(MODULES:=.cmx) $(MODULES:=.cmi) lexer.ml $(OUTPUT)
rm -f $(MODULES:=.obj) $(MODULES:=.o) $(MODULES:=.cmx) $(MODULES:=.cmi) $(MODULES:=.cmo) lexer.ml $(OUTPUT)

clean_tools:
rm -f $(OUTPUT) haxelib

# SUFFIXES

.ml.cmx:
$(CC_CMD)
$(CC_CMD) $(CFLAGS) -c $<

.mli.cmi:
$(CC_CMD)
.ml.cmo:
$(CC_CMD) $(CFLAGS) -c $<

.mll.ml:
ocamllex $<

.PHONY: haxe libs version.cmx haxelib
.PHONY: haxe libs version.cmx version.cmo haxelib
22 changes: 15 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ For the complete Haxe licenses, please see http://haxe.org/doc/license or [extra

## Installing Haxe

The latest stable release is [Haxe v3.1.2](http://haxe.org/download). Pre-built binaries are available for your platform:
The latest stable release is [Haxe v3.1.3](http://haxe.org/download). Pre-built binaries are available for your platform:

* **[Windows installer](http://haxe.org/file/haxe-3.1.2-win.exe)**
* **[Windows binaries](http://haxe.org/file/haxe-3.1.2-win.zip)**
* **[OSX installer](http://haxe.org/file/haxe-3.1.2-osx-installer.pkg)**
* **[OSX binaries](http://haxe.org/file/haxe-3.1.2-osx.tar.gz)**
* **[Linux 32-bit binaries](http://haxe.org/file/haxe-3.1.2-linux32.tar.gz)**
* **[Linux 64-bit binaries](http://haxe.org/file/haxe-3.1.2-linux64.tar.gz)**
* **[Windows installer](http://haxe.org/file/haxe-3.1.3-win.exe)**
* **[Windows binaries](http://haxe.org/file/haxe-3.1.3-win.zip)**
* **[OSX installer](http://haxe.org/file/haxe-3.1.3-osx-installer.pkg)**
* **[OSX binaries](http://haxe.org/file/haxe-3.1.3-osx.tar.gz)**
* **[Linux 32-bit binaries](http://haxe.org/file/haxe-3.1.3-linux32.tar.gz)**
* **[Linux 64-bit binaries](http://haxe.org/file/haxe-3.1.3-linux64.tar.gz)**

Automated development builds are available from [build.haxe.org](http://build.haxe.org).

Expand Down Expand Up @@ -70,3 +70,11 @@ You can get help and talk with fellow Haxers from around the world via:

* the [official Haxe Google Group](https://groups.google.com/forum/#!forum/haxelang)
* the [Haxe IRC chatroom](http://unic0rn.github.io/tiramisu/haxe/), #haxe on chat.freenode.net

## Version compatibility

Haxe | neko
---- | -----
2.* | 1.*
3.0.0 | 2.0.0
3.1.3 | 2.0.0
76 changes: 34 additions & 42 deletions codegen.ml
Original file line number Diff line number Diff line change
Expand Up @@ -681,53 +681,45 @@ module Abstract = struct
make_static_call ctx c cf (apply_params a.a_types pl) args t p

let rec do_check_cast ctx tleft eright p =
let tright = follow eright.etype in
let tleft = follow tleft in
if tleft == tright then eright else
let recurse cf f =
if cf == ctx.curfield || List.mem cf !cast_stack then error "Recursive implicit cast" p;
cast_stack := cf :: !cast_stack;
let r = f() in
cast_stack := List.tl !cast_stack;
r
in
try (match tright,tleft with
| (TAbstract({a_impl = Some c1} as a1,pl1) as t1),(TAbstract({a_impl = Some c2} as a2,pl2) as t2) ->
if a1 == a2 then
eright
else begin
let c,cfo,a,pl = try
if Meta.has Meta.MultiType a1.a_meta then raise Not_found;
c1,snd (find_to a1 pl1 t2),a1,pl1
with Not_found ->
if Meta.has Meta.MultiType a2.a_meta then raise Not_found;
c2,snd (find_from a2 pl2 t1 t2),a2,pl2
in
match cfo with
| None -> eright
| Some cf ->
recurse cf (fun () -> make_static_call ctx c cf a pl [eright] tleft p)
end
| _, TMono _ | TMono _, _ ->
eright
| TAbstract({a_impl = Some c} as a,pl),t2 when not (Meta.has Meta.MultiType a.a_meta) ->
begin match find_to a pl t2 with
| tcf,None ->
let tcf = apply_params a.a_types pl tcf in
if type_iseq tcf tleft then eright else do_check_cast ctx tcf eright p
| _,Some cf ->
recurse cf (fun () -> make_static_call ctx c cf a pl [eright] tleft p)
end
| t1,(TAbstract({a_impl = Some c} as a,pl) as t2) when not (Meta.has Meta.MultiType a.a_meta) ->
begin match find_from a pl t1 t2 with
| tcf,None ->
let tcf = apply_params a.a_types pl tcf in
if type_iseq tcf tleft then eright else do_check_cast ctx tcf eright p
| _,Some cf ->
recurse cf (fun () -> make_static_call ctx c cf a pl [eright] tleft p)
end
| _ ->
eright)
let find a tl f =
let tcf,cfo = f() in
match cfo,a.a_impl with
| None,_ ->
let tcf = apply_params a.a_types tl tcf in
if type_iseq tcf tleft then
eright
else
(* TODO: causes Java overload issues *)
(* let eright = mk (TCast(eright,None)) tleft p in *)
do_check_cast ctx tcf eright p
| Some cf,Some c ->
recurse cf (fun () -> make_static_call ctx c cf a tl [eright] tleft p)
| _ ->
assert false
in
if type_iseq tleft eright.etype then
eright
else try
begin match follow eright.etype with
| TAbstract(a,tl) ->
find a tl (fun () -> find_to a tl tleft)
| _ ->
raise Not_found
end
with Not_found -> try
begin match follow tleft with
| TAbstract(a,tl) ->
find a tl (fun () -> find_from a tl eright.etype tleft)
| _ ->
raise Not_found
end
with Not_found ->
eright

Expand Down Expand Up @@ -770,10 +762,10 @@ module Abstract = struct
{e with etype = m}
| TCall({eexpr = TField(_,FStatic({cl_path=[],"Std"},{cf_name = "string"}))},[e1]) when (match follow e1.etype with TAbstract({a_impl = Some _},_) -> true | _ -> false) ->
begin match follow e1.etype with
| TAbstract({a_impl = Some c} as a,_) ->
| TAbstract({a_impl = Some c} as a,tl) ->
begin try
let cf = PMap.find "toString" c.cl_statics in
make_static_call ctx c cf a [] [e1] ctx.t.tstring e.epos
make_static_call ctx c cf a tl [e1] ctx.t.tstring e.epos
with Not_found ->
e
end
Expand Down
Loading

0 comments on commit a1fedbb

Please sign in to comment.