The RegExp constructor is exported as exports["RegExp#constructor"] with a signature of (this_: RegExp, regex: string, flags: string) => RegExp (all pointers, the this_ argument is typically 0 to indicate that the ctor should allocate on its own, i.e. not a super() call). During demangling, the loader creates a function exports.RegExp one can use with and without new representing it, and one can invoke new exports.RegExp(regexPtr, flagsPtr) (without this_) effectively corresponding to exports.createRegExp(regexPtr, flagsPtr), but returning a wrapper class instead of just a pointer.
There may be value in exposing createRegExp, though, for where the loader is not used, i.e. when running the binary in a C or Rust host. The AS compiler typically does this to also provide an easy to use C-like interface that works everywhere.
https://github.com/ColinEberhardt/assemblyscript-regex/blob/75f1d474a60a6b4334b2a1cd367b7a90b0db026d/assembly/regexp.ts#L153-L157
The RegExp constructor is exported as
exports["RegExp#constructor"]
with a signature of(this_: RegExp, regex: string, flags: string) => RegExp
(all pointers, thethis_
argument is typically0
to indicate that the ctor should allocate on its own, i.e. not asuper()
call). During demangling, the loader creates a functionexports.RegExp
one can use with and withoutnew
representing it, and one can invokenew exports.RegExp(regexPtr, flagsPtr)
(withoutthis_
) effectively corresponding toexports.createRegExp(regexPtr, flagsPtr)
, but returning a wrapper class instead of just a pointer.There may be value in exposing
createRegExp
, though, for where the loader is not used, i.e. when running the binary in a C or Rust host. The AS compiler typically does this to also provide an easy to use C-like interface that works everywhere.