X Tutup
Skip to content

Cleaned up ForOf code#260

Merged
Perryvw merged 3 commits intomasterfrom
feature/ipairs-numeric-loop
Oct 21, 2018
Merged

Cleaned up ForOf code#260
Perryvw merged 3 commits intomasterfrom
feature/ipairs-numeric-loop

Conversation

@Perryvw
Copy link
Member

@Perryvw Perryvw commented Oct 20, 2018

Translates for .. of loops with a numeric loop instead of ipairs. Also fixes a couple (potential) bugs. Added a test for destructing loop variables.
Closes #150

@Perryvw Perryvw requested a review from lolleko October 20, 2018 17:52
}

const declaration = ts.createVariableDeclaration(variable.name, undefined, itemVariable);
result += this.indent + " " + this.transpileVariableDeclaration(declaration) + ";\n";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably should use pushIndent/popIndent aswell even if its just one line.

result += this.indent + this.transpileVariableDeclaration(declaration);

if (!isArray && ts.isIdentifier(variable.name)) {
result = this.indent + `for _, ${this.transpileIdentifier(variable.name)} in pairs(${expression}) do\n`;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No really in the scope of the PR but can we rename expression to something more descriptive, maybe iterable or something like this.

Also the comment on Line 560 is a bit useless imo.

@@ -1,4 +1,6 @@
for _, i in ipairs({1,2,3,4,5,6,7,8,9,10}) do
local __loopVariable0 = {1,2,3,4,5,6,7,8,9,10};
for i0=1, #__loopVariable0 do
Copy link
Member

@lolleko lolleko Oct 20, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized that using # operator is unsafe. Not sure if this applies only to this part of the transpiler or to other parts aswell.

If you do

local x = {1,2}
x[5] = 12
print(#x)

The result is undefined because the array has gaps, i got 2 as result when running in https://www.lua.org/cgi-bin/demo

var arr = [1, 2];
arr[5] = 12;
console.log(arr.length);

However returns 6 as "expected".

@Perryvw Perryvw merged commit c4cd099 into master Oct 21, 2018
@Perryvw Perryvw deleted the feature/ipairs-numeric-loop branch October 21, 2018 10:15
Perryvw pushed a commit that referenced this pull request Dec 15, 2018
* converting 'else if' statements to lua 'elseif' instead of nested ifs (#254)

* Const enum support (#253)

* Const enum support

* Changed string concatenation to interpolation

* refactored try block to allow rethrow (#251)

* refactored try block to allow rethrow

* updated rethrow test with something less convoluted

* Made LuaJIT use table.unpack for destructing assignments (#257)

* Fixed JIT using table.unpack (#258)

* Fixed JIT using table.unpack

sry

* Fixed test for JIT unpack

* Moved transpileDestructingAssignmentValue from 5.1 to 5.0

* Moved transpile switch to Lua 5.2 (#259)

* Moved transpile switch to Lua 5.2

Closes #194

* Fixed typo

* Cleaned up ForOf code (#260)

* Cleaned up forOf loop, made it use numeric loop instead of ipairs

* Fixed bug in non-array loop header and fixed tests

* Fixed up some PR comments

* passing nil instead of _G as context for global functions when in ES strict mode

* fixed logic for determining strict mode

* replaced hack-around when passing nil as a function context with a null keyword

* testing viability of wrapping context/no-context calls on assignment

* working on more function assignment situations

* Fix error in module namespace enum exporting (#272)

* fixed getting constructor signature and refactored things a bit

* checking resolved signature when comparing function types passed as arguments

* 0.11.0

* Update CHANGELOG.md

* Luajit unpack fix (#273)

* LuaJIT uses LuaTranspiler's spread

* Added some unit tests for spreading

* Stopped using prototype

* Removed Transpiler import

* Fixed constructor overloads (#275)

* Fixed constructor overloads

Fixes #274

* Removed lambda body

* Removed transpileFile (should be added to changelog since this was exposed in the API)

* Lualib omit when unused (#280)

* lualib inline omit header when no features are used

* Tests to enforce no lualib text when unused, unless using always

* Fixed bug with default values for constructor parameters

* 0.11.1

* working on assignment checks for methods vs functions

* handling context in calls and decls

* refactoring and handling tuple destructuring

* generalized tuple assignment checking

* overloads with function and method signatures default to functions now

* preventing non-methods from being passed to bind/call/apply

* removed uneccessary helpers

* using proper exceptions for function conversion errors

* removed context arg from custom constructors and added check for assigning to untyped vars

* updated tests

* removing leftover NoContext decorators

* Added discord badge and link to readme

* Added support for JSDoc tags as decorators

* Fixed invalid jsdoc failing a test

* Added deprecation warning for ! decorators

* Refactored decorator creation, made decorators case-insensitive

* Fixed jsdoc tests

* Fixed test runner not failing

* recursing into interfaces during assignment validation

* Update README.md

* fixes for issues with overloads using different context types

* Fixed casing and symbol of decorators to be consistent with the new convention

* less-lazy variable naming and improved error message

* removing assignments translation test (#296)

* Create CONTRIBUTING.md

* Update README.md

* Detecting types derived from array (#289)

* check the base types to determine if a type inherits from Array<T>

* dont block exceptions

* remove empty else clause

* remove space

* added tsHelper.isDefaultArrayCallExpression()

* added derived array recognition test code

* Added isExplicitArrayType() method

* added unit test

* rewrite isDefaultArrayCall() -> isDefaultArrayCallMethodName()

* change switch statement to Set<string> lookup

* 0.12.0

* stabilize package lock

* Check inherited accessors (#297)

* check for inherited accessor methods

* diversify test

* removed FocusTests and repositioned forAllTypes

* rename forTypeOrAnySupertype

* Fixed default constructor on subclass (#301)

* Use declared types (#302)

* update forTypeOrAnySupertype() to use declared type

* added test case for accessor using this

* enhance test to use generics

* 0.12.1

* suite of tests for new functions and fixes for edge-cases found

* validating return values and hanlding inference of contexts when passing functions as arguments or return values

* renamed getFunctionReturnType to getContainingFunctionReturnType

* handling more edge cases, adding more tests and a little bit of refactoring
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

For of should use numeric loops instead of ipairs

2 participants

X Tutup