From 90ccdedf66f1dbd0e332d4ec8918f7b51ce8775a Mon Sep 17 00:00:00 2001 From: Lars Hvam <5888506+larshp@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:10:42 +0200 Subject: [PATCH 1/2] fix typeof --- src/zcl_mjs.clas.testclasses.abap | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/zcl_mjs.clas.testclasses.abap b/src/zcl_mjs.clas.testclasses.abap index b3676c9..0115618 100644 --- a/src/zcl_mjs.clas.testclasses.abap +++ b/src/zcl_mjs.clas.testclasses.abap @@ -100,6 +100,7 @@ CLASS ltcl_test DEFINITION FOR TESTING METHODS test_new_set FOR TESTING RAISING zcx_mjs_runtime. METHODS test_set_has FOR TESTING RAISING zcx_mjs_runtime. METHODS test_namespace_class FOR TESTING RAISING zcx_mjs_runtime. + METHODS test_class_typeof FOR TESTING RAISING zcx_mjs_runtime. METHODS test262 FOR TESTING RAISING zcx_mjs_runtime. @@ -845,6 +846,16 @@ CLASS ltcl_test IMPLEMENTATION. exp = |true| ). ENDMETHOD. + METHOD test_class_typeof. + DATA(lv_nl) = cl_abap_char_utilities=>newline. + DATA(lv_js) = + `class MyClass {}` && lv_nl && + `console.log(typeof MyClass);`. + cl_abap_unit_assert=>assert_equals( + act = trim( zcl_mjs=>eval( lv_js ) ) + exp = |function| ). + ENDMETHOD. + METHOD test262. DATA(lv_nl) = cl_abap_char_utilities=>newline. DATA(lv_js) = From b9902dd5b537651fd672b17862b717fe3e246340 Mon Sep 17 00:00:00 2001 From: Lars Hvam <5888506+larshp@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:33:25 +0200 Subject: [PATCH 2/2] fix --- src/zcl_mjs.clas.abap | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/zcl_mjs.clas.abap b/src/zcl_mjs.clas.abap index 03ff738..3059041 100644 --- a/src/zcl_mjs.clas.abap +++ b/src/zcl_mjs.clas.abap @@ -2113,6 +2113,12 @@ CLASS zcl_mjs IMPLEMENTATION. rs_val = string_val( `boolean` ). WHEN 4. rs_val = string_val( `function` ). + WHEN 6. + IF ls_toval-obj->has( `__is_class__` ) = abap_true. + rs_val = string_val( `function` ). + ELSE. + rs_val = string_val( `object` ). + ENDIF. WHEN OTHERS. rs_val = string_val( `object` ). ENDCASE. @@ -2262,6 +2268,7 @@ CLASS zcl_mjs IMPLEMENTATION. ENDIF. lo_cls_env->define( iv_name = `__super_proto__` is_val = ls_super_cls_val ). ENDIF. + ls_clsobj-obj->set( iv_key = `__is_class__` ir_val = box_value( bool_val( abap_true ) ) ). LOOP AT -methods INTO DATA(ls_cm). DATA lr_mfn TYPE REF TO data. CREATE DATA lr_mfn TYPE zif_mjs=>ty_function.