@@ -783,6 +783,8 @@ typedef enum {
783
783
JL_PARSE_TOPLEVEL = 3 ,
784
784
} jl_parse_rule_t ;
785
785
786
+ // Parse string `content` starting at byte offset `start_pos` attributing it to
787
+ // `filename`. Return an svec of (parse_result, final_pos)
786
788
JL_DLLEXPORT jl_value_t * jl_fl_parse (const char * content , size_t content_len ,
787
789
const char * filename , size_t filename_len ,
788
790
int start_pos , jl_parse_rule_t rule )
@@ -856,113 +858,6 @@ JL_DLLEXPORT jl_value_t *jl_parse_input_line(const char *str, size_t len,
856
858
return jl_parse_all (str , len , filename , filename_len );
857
859
}
858
860
859
- // Parse a string `text` at top level, attributing source locations to
860
- // `filename`. Each expression is optionally modified by `mapexpr` (if
861
- // non-NULL) before evaluating in module `inmodule`.
862
- jl_value_t * jl_parse_eval_all (jl_module_t * inmodule , jl_value_t * text ,
863
- jl_value_t * filename , jl_value_t * mapexpr )
864
- {
865
- jl_ptls_t ptls = jl_get_ptls_states ();
866
- if (ptls -> in_pure_callback )
867
- jl_error ("cannot use include inside a generated function" );
868
- jl_ast_context_t * ctx = jl_ast_ctx_enter ();
869
- fl_context_t * fl_ctx = & ctx -> fl ;
870
- value_t f , ast , expression ;
871
- f = cvalue_static_cstrn (fl_ctx , jl_string_data (filename ), jl_string_len (filename ));
872
- fl_gc_handle (fl_ctx , & f );
873
- {
874
- JL_TIMING (PARSING );
875
- value_t t = cvalue_static_cstrn (fl_ctx , jl_string_data (text ),
876
- jl_string_len (text ));
877
- fl_gc_handle (fl_ctx , & t );
878
- ast = fl_applyn (fl_ctx , 2 , symbol_value (symbol (fl_ctx , "jl-parse-all" )), t , f );
879
- fl_free_gc_handles (fl_ctx , 1 );
880
- }
881
- fl_free_gc_handles (fl_ctx , 1 );
882
- if (ast == fl_ctx -> F ) {
883
- jl_ast_ctx_leave (ctx );
884
- jl_errorf ("could not open file %s" , jl_string_data (filename ));
885
- }
886
- fl_gc_handle (fl_ctx , & ast );
887
- fl_gc_handle (fl_ctx , & expression );
888
-
889
- int last_lineno = jl_lineno ;
890
- const char * last_filename = jl_filename ;
891
- size_t last_age = jl_get_ptls_states ()-> world_age ;
892
- int lineno = 0 ;
893
- jl_lineno = 0 ;
894
- jl_filename = jl_string_data (filename );
895
- jl_module_t * old_module = ctx -> module ;
896
- ctx -> module = inmodule ;
897
- jl_value_t * form = NULL ;
898
- jl_value_t * result = jl_nothing ;
899
- int err = 0 ;
900
- JL_GC_PUSH2 (& form , & result );
901
- JL_TRY {
902
- assert (iscons (ast ) && car_ (ast ) == symbol (fl_ctx , "toplevel" ));
903
- ast = cdr_ (ast );
904
- while (iscons (ast )) {
905
- expression = car_ (ast );
906
- {
907
- JL_TIMING (LOWERING );
908
- if (fl_ctx -> T == fl_applyn (fl_ctx , 1 , symbol_value (symbol (fl_ctx , "contains-macrocall" )), expression )) {
909
- form = scm_to_julia (fl_ctx , expression , inmodule );
910
- if (mapexpr )
911
- form = jl_call1 (mapexpr , form );
912
- form = jl_expand_macros (form , inmodule , NULL , 0 );
913
- expression = julia_to_scm (fl_ctx , form );
914
- }
915
- else if (mapexpr ) {
916
- form = scm_to_julia (fl_ctx , expression , inmodule );
917
- form = jl_call1 (mapexpr , form );
918
- expression = julia_to_scm (fl_ctx , form );
919
- }
920
- // expand non-final expressions in statement position (value unused)
921
- expression =
922
- fl_applyn (fl_ctx , 4 ,
923
- symbol_value (symbol (fl_ctx , "jl-expand-to-thunk-warn" )),
924
- expression , symbol (fl_ctx , jl_string_data (filename )),
925
- fixnum (lineno ), iscons (cdr_ (ast )) ? fl_ctx -> T : fl_ctx -> F );
926
- }
927
- jl_get_ptls_states ()-> world_age = jl_world_counter ;
928
- form = scm_to_julia (fl_ctx , expression , inmodule );
929
- JL_SIGATOMIC_END ();
930
- jl_get_ptls_states ()-> world_age = jl_world_counter ;
931
- if (jl_is_linenode (form )) {
932
- lineno = jl_linenode_line (form );
933
- jl_lineno = lineno ;
934
- }
935
- else {
936
- result = jl_toplevel_eval_flex (inmodule , form , 1 , 1 );
937
- }
938
- JL_SIGATOMIC_BEGIN ();
939
- ast = cdr_ (ast );
940
- }
941
- }
942
- JL_CATCH {
943
- form = filename ;
944
- result = jl_box_long (jl_lineno );
945
- err = 1 ;
946
- goto finally ; // skip jl_restore_excstack
947
- }
948
- finally :
949
- jl_get_ptls_states ()-> world_age = last_age ;
950
- jl_lineno = last_lineno ;
951
- jl_filename = last_filename ;
952
- fl_free_gc_handles (fl_ctx , 2 );
953
- ctx -> module = old_module ;
954
- jl_ast_ctx_leave (ctx );
955
- if (err ) {
956
- if (jl_loaderror_type == NULL )
957
- jl_rethrow ();
958
- else
959
- jl_rethrow_other (jl_new_struct (jl_loaderror_type , form , result ,
960
- jl_current_exception ()));
961
- }
962
- JL_GC_POP ();
963
- return result ;
964
- }
965
-
966
861
// returns either an expression or a thunk
967
862
jl_value_t * jl_call_scm_on_ast (const char * funcname , jl_value_t * expr , jl_module_t * inmodule )
968
863
{
0 commit comments