Skip to content

Commit e4c5837

Browse files
committed
22.1.1
1 parent 92a5bde commit e4c5837

9 files changed

Lines changed: 151 additions & 24 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
dump/
22
build.hxml
33
bin/
4-
Main.hx
4+
Main.hx
5+
SScript.zip

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# 22.1.1
2+
## Additions
3+
- Added `FULL` as a Preset mode
4+
- Added more backward compatibility
5+
- You can now use `in` while importing with alias
6+
7+
## Changes
8+
- Default preset mode is now `REGULAR`
9+
110
# 22.1.0
211
## Additions
312
- Added partial backward compatibility for older SScript versions

README.md

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,58 @@ class Main {
6161

6262
### New features
6363

64+
#### Import
65+
SScript supports normal imports, wildcard imports and imports with aliases.
66+
67+
```haxe
68+
import hscript.SScript;
69+
70+
class Main {
71+
static function main() {
72+
var script:SScript = new SScript();
73+
script.doString("
74+
import Date;
75+
trace(Data.now());
76+
");
77+
}
78+
}
79+
```
80+
81+
##### Wildcard Imports
82+
```haxe
83+
import hscript.SScript;
84+
85+
class Main {
86+
static function main() {
87+
var script:SScript = new SScript();
88+
script.doString("
89+
import sys.*;
90+
trace(FileSystem); // Class<sys.FileSystem>
91+
");
92+
}
93+
}
94+
```
95+
96+
SScript uses a macro for wildcard imports. In most cases, it works fine. However, if you want to disable this feature, you can define `DISABLED_MACRO_SUPERLATIVE` in your project. This is not recommended, however, as doing so will also make the `FULL` preset mode unavailable.
97+
98+
##### Import with Alias
99+
```haxe
100+
import hscript.SScript;
101+
102+
class Main
103+
{
104+
static function main()
105+
{
106+
var script:SScript = new SScript();
107+
script.doString("
108+
import sys.FileSystem in L;
109+
import sys.io.File as G;
110+
trace(L, G); // Class<sys.FileSystem>,Class<sys.io.File>
111+
");
112+
}
113+
}
114+
```
115+
64116
#### String Interpolation
65117
SScript supports string interpolation. Just like normal haxe, special identifiers, denoted by the dollar sign `$` within a String enclosed by single-quote `'` characters, are evaluated as if they were concatenated identifiers.
66118

@@ -103,7 +155,7 @@ class Main {
103155
trace(matches.length); // 3
104156
105157
// Email addresses regular expression
106-
// (In files, use one back slash instead
158+
// (In files, use one back slash instead)
107159
var emailReg = ~/[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z][A-Z][A-Z]*/i;
108160
trace(emailReg.match("superlative@email.com")); // true
109161
');
@@ -140,7 +192,7 @@ class Main {
140192
```
141193

142194
This makes `import` optional and it is useful for one-time use of a class or enum.
143-
This feature may be exhausting for weak machines, so if you wish to disable it set `hscript.SScript.defaultImprovedField` to `false`.
195+
This feature may be exhausting for weak machines and is disabled by default, so if you wish to enable it set `hscript.SScript.defaultImprovedField` to `true`.
144196

145197
## Reworked Function Arguments
146198
Function arguments have been reworked, so optional arguments will work like native Haxe.
@@ -170,10 +222,11 @@ class Main {
170222
Presets are the variables that get set before the script gets executed.
171223

172224
SScript has a presetting system where you can set multiple preset modes
173-
to customize presetting. Currently it has 3 modes, `NONE`, `MINI` and `REGULAR`.
225+
to customize presetting. Currently it has 4 modes, `NONE`, `MINI`, `REGULAR` and `FULL`.
174226

175-
`MINI` only contains basic classes and extremely lightweight,
176-
`REGULAR` contains slightly more and it includes more common classes aswell.
227+
- `MINI` only contains basic classes and extremely lightweight,
228+
- `REGULAR` contains slightly more and it includes more common classes aswell.
229+
- `FULL` contains all existing classes, expensive when there are many scripts being handled. (Avaiable only if `DISABLED_MACRO_SUPERLATIVE` is undefined)
177230

178231
Example:
179232
```haxe
@@ -182,8 +235,8 @@ import hscript.SScript;
182235
183236
class Main {
184237
static function main() {
185-
SScript.defaultPreset = PresetMode.REGULAR;
186-
var script = new SScript("trace(Json); // haxe.Json class is included with REGULAR");
238+
SScript.defaultPreset = PresetMode.FULL;
239+
var script = new SScript("trace(Json); // haxe.Json class is included with REGULAR and FULL");
187240
}
188241
}
189242
```
@@ -316,6 +369,7 @@ Special objects are especially useful for OpenFL and Flixel states.
316369

317370
Example:
318371
```haxe
372+
import flixel.FlxG;
319373
import hscript.SScript;
320374
321375
class PlayState extends flixel.FlxState
@@ -324,10 +378,14 @@ class PlayState extends flixel.FlxState
324378
override function create()
325379
{
326380
sprite = new flixel.FlxSprite();
381+
sprite.makeGraphic(FlxG.width, FlxG.height, FlxColor.WHITE);
382+
add(sprite);
327383
328384
var newScript:SScript = new SScript();
329385
newScript.setSpecialObject(this);
330386
newScript.doString("sprite.visible = false;");
387+
388+
super.create();
331389
}
332390
}
333391
```

haxelib.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"script"
1010
],
1111
"description": "SScript (also known as SuperlativeScript), fork of HScript with fixes and improvements.",
12-
"version": "22.1.0",
12+
"version": "22.1.1",
1313
"classPath": "src/",
1414
"releasenote": "Check CHANGELOG.md",
1515
"contributors": [

src/hscript/SScript.hx

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ class SScript
104104
105105
`trace(sys.FileSystem.exists("hscript/SScript.hx")); // true`
106106
107-
This may be exhausting for old or weak computers.
108-
Set this to null if you experience performance problems.
107+
This may be exhausting for old computers since it uses Reflection.
108+
Don't set this to true if you experience performance problems.
109109
**/
110110
public static var defaultImprovedField:Null<Bool> = false;
111111

@@ -117,12 +117,17 @@ class SScript
117117
/**
118118
Default preset mode for Haxe classes.
119119
120-
MINI contains only basic classes like `Math`,
121-
while REGULAR contains most cross-target Haxe classes.
120+
**MINI** contains only basic classes like `Math`.
122121
123-
Default is `MINI`. Use `NONE` for no preset.
122+
123+
**REGULAR** contains most cross-target Haxe classes.
124+
125+
**FULL** contains all existing classes.
126+
Can get expensive if you're handling a lot of scripts.
127+
128+
Default is `REGULAR`. Use `NONE` for no preset.
124129
**/
125-
public static var defaultPreset:PresetMode = MINI;
130+
public static var defaultPreset(default, set):PresetMode = REGULAR;
126131

127132
/**
128133
If not null, when a script is created, the function with this name
@@ -158,7 +163,7 @@ class SScript
158163
/**
159164
If not null, enables the improved field system for this script.
160165
161-
Default is `true`.
166+
Disabled by default.
162167
163168
@see `SScript.defaultImprovedField`
164169
**/
@@ -1066,4 +1071,19 @@ class SScript
10661071
interp.improvedField = value;
10671072
return improvedField = value;
10681073
}
1074+
1075+
static var showedWarning:Bool = false;
1076+
static function set_defaultPreset(value:PresetMode):PresetMode {
1077+
#if !DISABLED_MACRO_SUPERLATIVE
1078+
if (value == FULL && !showedWarning) {
1079+
trace("You set preset mode to FULL, which contains all existing classes.");
1080+
trace("If you're handling a lot of scripts, this can get very expensive.");
1081+
trace("See REGULAR or MINI for alternatives.");
1082+
1083+
showedWarning = true;
1084+
}
1085+
#end
1086+
1087+
return defaultPreset = value;
1088+
}
10691089
}

src/hscript/backend/Preset.hx

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
package hscript.backend;
22

3+
import haxe.ds.ArraySort;
4+
import hscriptBase.Tools;
5+
36
enum PresetMode
47
{
58
NONE;
69
MINI;
710
REGULAR;
11+
#if !DISABLED_MACRO_SUPERLATIVE
12+
FULL;
13+
#end
814
}
915

1016
@:access(hscript.backend.PresetClasses)
1117
@:access(hscript.SScript)
1218
class Preset
1319
{
14-
public var haxeMode:PresetMode;
20+
public var presetMode:PresetMode;
1521

1622
var script:SScript;
1723
var _destroyed:Bool = false;
@@ -21,22 +27,26 @@ class Preset
2127
return;
2228

2329
this.script = script;
24-
haxeMode = SScript.defaultPreset;
30+
presetMode = SScript.defaultPreset;
2531
}
2632

2733
function preset()
2834
{
2935
if (_destroyed || script == null || script._destroyed)
3036
return;
3137

32-
var hArray = switch haxeMode {
38+
var hArray = switch presetMode {
3339
case MINI: PresetClasses.miniHaxe;
3440
case REGULAR: PresetClasses.regularHaxe;
41+
#if !DISABLED_MACRO_SUPERLATIVE
42+
case FULL: PresetClasses.fullHaxe;
43+
#end
3544
case _: [];
3645
}
3746

38-
for (i in hArray.copy())
47+
for (i in hArray.copy()) {
3948
script.setClass(i);
49+
}
4050
}
4151

4252
function destroy()
@@ -45,7 +55,7 @@ class Preset
4555
return;
4656

4757
script = null;
48-
haxeMode = null;
58+
presetMode = null;
4959

5060
_destroyed = true;
5161
}
@@ -71,4 +81,28 @@ class PresetClasses
7181

7282
array;
7383
}
84+
85+
#if !DISABLED_MACRO_SUPERLATIVE
86+
static var fullHaxe:Array<Class<Dynamic>> = byMap();
87+
88+
static function byMap():Array<Class<Dynamic>> {
89+
var classes:Array<Class<Dynamic>> = [];
90+
@:privateAccess for (i => k in Tools.allClassesAvailable) {
91+
classes.push(k);
92+
}
93+
94+
ArraySort.sort(classes, function(a:Class<Dynamic>, b:Class<Dynamic>):Int {
95+
var a = Type.getClassName(a).toUpperCase();
96+
var b = Type.getClassName(b).toUpperCase();
97+
98+
if (a < b)
99+
return -1;
100+
else if (a > b)
101+
return 1;
102+
else
103+
return 0;
104+
});
105+
return classes;
106+
}
107+
#end
74108
}

src/hscriptBase/Parser.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ class Parser {
901901

902902
var tk = token();
903903
if( tk == TStatement ) push(tk);
904-
else if( Type.enumEq(tk,TId('as')) ) {
904+
else if( Type.enumEq(tk,TId('as')) || Type.enumEq(tk,TId('in')) ) {
905905
var tk = token();
906906
switch tk {
907907
case TId(s): asIdent = s;

src/hscriptBase/Tools.hx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ class Tools {
119119
}
120120

121121
#if !macro
122-
static final allNamesAvailable:Array<String> = [];
123122
static final allClassesAvailable:Map<String, Class<Dynamic>> = {
124123
function returnMap()
125124
{
@@ -133,7 +132,6 @@ class Tools {
133132
var c = Type.resolveClass(i);
134133
if (c != null)
135134
map[i] = c;
136-
allNamesAvailable.push(i);
137135
}
138136
}
139137

src/tea/SScript.hx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package tea;
22

3+
import hscript.backend.Preset;
4+
35
@:deprecated('Use hscript.SScript instead')
46
typedef SScript = hscript.SScript;
57

8+
@:deprecated('Use hscript.backend.Preset instead')
9+
typedef TeaPreset = Preset;
10+
@:deprecated('Use hscript.backend.Preset.PresetMode instead')
11+
typedef TeaPresetMode = PresetMode;
12+
613
@:deprecated('Use hscript.SScript.FunctionCall instead')
714
typedef Tea = hscript.SScript.FunctionCall;
815
@:deprecated('Use hscript.SScript.FunctionCall instead')

0 commit comments

Comments
 (0)