This is a proposal for the inclusion of an additional primordial variable to all ECMAScript contexts.
- There MUST be a primordial function Module(text, fileName, lineNo)- textMUST be parsed the body of a strict-mode Function
- ModuleMAY throw a- SyntaxError
- fileNameis an optional name for the text, for debuggers
- lineNodefaults to 1, is coerced to- Numberinternally, and represents the line number corresponding to the beginning of the text within the file indicated by- fileName
- ModuleMAY be called as a constructor or as a function. Its behavior must be identical in either case.
- Modulereturns a- Function(for illustration:- module(scope))- scopeis internally coerced to an- Object
- when module is called
- the function described in textis run in a lexical scope that contains- the primordials (Non normatively, these include ArrayandObjectbut not legacy, embedding-specific values likewindow; a citation to a comprehensive list in the specification is needed here)
- preceding the primordials, a variable corresponding to each owned property of scope
- such that any free variable in textthat is neither mentioned in thescopeobject or is a primordial throws aReferenceErrorat the point it is used.
 
- the primordials (Non normatively, these include 
- the module returns the value returned by the function
 
- the function described in 
- the Moduleinstance MUST own arequirementsproperty- requirementsare an- Array
- requirementsmust contain the string corresponding to each occurrence of the free variable- requirethat exists in- textin which- requireis called as a function with the- Stringas its argument
 
- the Moduleinstance MUST own thefileNameproperty corresponding to thefileNamegiven to theModuleconstructor.
- the Moduleinstance MUST own thelineNoproperty corresponding to thelineNogiven to theModuleconstructor.
 
 
Ihab, in response to (4), yes, it would be too narrow a constraint for require calls to be limited to some pattern in the header of the code; it would add too much complexity for us meager developers who have the right to assume require calls will work just about anywhere. I trust that there are enough short-circuits implied by the requirements search that it would not significantly affect performance to collect a list of strings in an existing visit of the token stream. The search need not be performed unless the parse is run in conjunction with a Module constructor. The entire search can be aborted in a lexical context in which require is no longer a free variable. And so on.