Commit Graph
170 Commits
Author SHA1 Message Date
Joshua Cotton c19a417321 Allow / in relative paths for using module (#7424) (#12492) 2020-04-30 11:20:53 -07:00
Joel Sallow (/u/ta11ow) ba53621894 Allow shorter signed hex literals with appropriate type suffixes (#11844) 2020-04-20 16:51:40 -07:00
Shayde Nofziger 238cb5c8dc Fix erroneous comment in tokenizer.cs (#12206)
The BigInteger NumberSuffixFlags enum is 'N', not 'I'. Fix the comment to indicate it as such.
2020-03-26 13:18:33 +05:00
Steve Lee f23be437af Fix terms checker issues (#12189) 2020-03-24 11:38:45 -07:00
Steve Lee b7cb335f03 Update copyright notice to latest guidance (#12190) 2020-03-24 11:08:37 -07:00
Ilya b5d4739b2a Use span-based overloads (#11884) 2020-03-18 18:38:55 +05:00
Ilya 59ad53181e Remove old dead code from FullCLR (#11886) 2020-02-20 11:39:15 -08:00
Tyler James Leonhardt ac1b83f152 Use Environment.NewLine instead of hard-coded linefeed in ParseError.ToString (#11746) 2020-02-03 14:03:12 -08:00
xtqqczze a34d0f3e80 Reformat code according to EditorConfig rules (#11681) 2020-01-31 14:56:22 -08:00
xtqqczze c4e144b13e Replace use of throw GetExceptionForHR with ThrowExceptionForHR (#11640)
`System.Runtime.InteropServices.Marshall.GetExceptionForHR` may not return an exception. Instead of `throw GetExceptionForHR` we can use `ThrowExceptionForHR`.

Fix warnings `CS8597:Thrown value may be null.`
2020-01-31 10:13:12 +05:00
Dongbo Wang a4c32bc337 Revert the PRs that made DBNull.Value and NullString.Value treated as $null (#11648) 2020-01-29 14:13:05 -08:00
Steve Lee ed1f6e3144 Make approved features non-experimental (#11303) 2019-12-10 15:41:43 -08:00
Aditya Patwardhan 2579c00a20 Support null-conditional operators ?. and ?[] in PowerShell language (#10960) 2019-11-15 16:39:53 -08:00
Robert Holt ad12b14517 Stop blindly setting $? to true for ParenExpression, SubExpression and ArrayExpression (#11040) 2019-11-15 11:57:45 -08:00
Dongbo Wang fff137e69f Avoid using closure in Parser.SaveError (#11006) 2019-11-08 00:45:43 +00:00
Ilya 9851b07b1d Fix style issues (#10998) 2019-11-07 11:49:06 -08:00
Ilya d58a82ad19 Cleanup: use the built-in type alias (#10882) 2019-11-06 08:47:32 +05:00
Ilya 89c66030ba Cleanup style issues in Compiler.cs (#10368) 2019-10-22 13:46:12 +05:00
Robert Holt 2f4ed146ae Fix pure expressions setting $? in pipeline chains (#10836) 2019-10-18 14:57:56 -07:00
Robert Holt 2a518fcfe2 Support the pipeline chain operators && and || in PowerShell language (#9849) 2019-10-17 14:43:46 -07:00
Aditya Patwardhan 425bc36a6f Implement Null Coalescing and Null Coalescing assignment operators (#10636) 2019-10-17 10:21:24 -07:00
Dongbo Wang 89a6ad5399 Add the missing token text for TokenKind.QuestionMark (#10706) 2019-10-07 08:33:12 -07:00
Steve Lee 8cf9c01800 Add ConciseView for $ErrorView (#10641) 2019-10-04 16:52:57 -07:00
Ilya eb2220632c Clean up CodeFactor style issues coming in commits for the last month (#10591)
Only reformatting changes.
2019-09-28 12:47:09 +05:00
Dongbo Wang 5069c7d6a6 Support ternary operator in PowerShell language (#10367) 2019-09-04 13:22:33 -07:00
Kirk Munro 8b9f4124ce Add support to ActionPreference.Break to break into debugger (#8205) 2019-08-23 10:34:10 -07:00
Kirk Munro eb81fb749a Mark -parallel and -throttlelimit reserved for foreach and switch statements (#10328) 2019-08-15 14:41:41 -07:00
Ilya e7e53b603a Avoid Assembly.GetName() in 'ClrFacade.GetAssemblies(string)' to reduce allocations of 'CultureInfo' objects (#10024) 2019-07-01 08:37:59 -07:00
Dongbo Wang 026a8f1f41 Avoid the int[] and int[,] allocation when tokenizing line comments and matching wildcard pattern (#10009)
- Reusing the same 2-dimensional integer array for processing line comments in the same Tokenizer.
- Use ArrayPool<int> in PatternPositionVisitor to avoid creating transient int[].
2019-06-28 08:14:41 +05:00
Ilya dd7e45fe2e Code cleanup: use IndexOf(char) overload (#9722)
- Use IndexOf(char) overload instead of IndexOf(string) to benefit from Ordinal search
- Replace IndexOf with Contains to get more understandable code
- Use StringComparison.Ordinal for ASCII chars
2019-06-26 11:02:07 +05:00
Ilya d6390461b2 Move consts and methods to single CharExtensions class (#9992) 2019-06-25 15:37:47 -07:00
Joel Sallow (/u/ta11ow) 86a1697da9 Allow methods to be named after keywords (#9812) 2019-06-25 11:04:00 -07:00
Dongbo Wang 9dfec6ca84 Remove dead code about 'IsTransparentProxy' (#9966) 2019-06-21 09:12:09 +05:00
Ilya 7e423e7451 Fix minor style issues come from last commits (#9640) 2019-06-07 08:35:33 +05:00
Kirk Munro 112401ed37 Support line continuance with pipe at the start of a line (#8938)
Expands line continuance for pipelines to allow lines to continue automatically without backticks with the pipe symbol at the start of a line.
This adds to the existing functionality where pipes can be used to continue lines by placing them at the end of a line.
2019-05-13 22:57:57 -07:00
Ilya bd6fdae735 Cleanup: sort usings (#9490) 2019-04-30 10:25:11 +05:00
Ilya ceed73d737 Run Codeformatter for SMA (#9402) 2019-04-24 19:27:22 +05:00
Joel Sallow (/u/ta11ow) 3f52adb0ae Add Binary Parsing Support & Refactor TryGetNumberValue & ScanNumberHelper (#7993)
Fixes #7557 

* Adds support for binary parsing in format echoing hex: `0b11010110`
  * Works with all existing type suffixes and multipliers.
  * Supports arbitrary length parsing with `n` suffix using BigInteger; details below.
* Adds `NumberFormat` enum to specify hex/binary/base 10 for the tokenizer, replacing old `bool hex`.
* Adds `n` suffix for all numeric literals to support returning value as a `BigInteger` if requested. This bypasses the issue of large literals losing accuracy when they cast through `double`.
* Adds tests for all new behaviours.

---

### Binary / Hex Parsing Implementation

* Mimics old sign bit behaviour for int and long types. Sign bits accepted for 8 or 16-bit Hex parsing, and 8, 16, 32, 64 for binary.
  * i.e., `0xFFFFFFFF -eq ([int]-1)` and `0xFFFFFFFFFFFFFFFF -eq ([long]-1)`, but suffixing `u` creates `int.MaxValue` and `long.MaxValue`, respectively, instead.
* Sign bits higher than this are accepted for bigint-suffixed numerals:
    * Hex: Bigint-suffixed hex treats the high bit of any literal with a length multiple of 8 as the sign bit
    * Binary: Bigint-suffixed binary accepts sign bits at 96 and 128 chars, and from there on every 8 characters.
    * Prefixing the literal with a 0 will bypass this and be treated as unsigned, e.g. `0b011111111`
* Specifying an `u`nsigned suffix (or combination suffix that includes `u`) ignores sign bits, similar to how parsing a hex string using `[Convert]::ToUint32()` would do so.
* Supports negating literals using `-` prefix. This can result in positive numbers due to sign bits being permitted, just like hex literals.

---

### Refactored numeric tokenizer parsing

**New flow:**

1. Check for `real` (`.01`, `0.0`, or `0e0` syntaxes)
    1. If the decimal suffix is present, TryParse directly into decimal. If the TryParse fails, TryGetNumberValue returns `false`.
    2. TryParse as `Double`, and apply multiplier to value. If the TryParse fails, TryGetNumberValue returns `false`.
        1. Check type suffixes and attempt to cast into appropriate type. This will return `false` if the value exceeds the specified type's bounds.
        2. Default to parsing as `double` where no suffix has been applied.
2. Check number format.
    * If binary, manually parse into BigInteger using optimized helper function to directly construct the BigInteger bytes from the string.
    * If hex, TryParse into `BigInteger` using some special casing to retain original behaviours in int/long ranges.
    * If neither binary nor hex, TryParse normally as a `BigInteger`.
3. Apply multiplier value before attempting any casts to ensure type bounds can be appropriately checked without overflows.
4. Check type suffixes.
    * If a specific type suffix is used, check type bounds and attempt to parse into that type.
      * If the value exceeds the type's available values, the parse fails. Otherwise, a straight cast is performed.
5. If no suffix is used, the following types are bounds-checked, in order, resulting in the first successful test determining the type of the number. 
    * `int`
    * `long`
    * `decimal` (base-10 literals only)
    * `double` (base-10 literals only)
    * ~~`BigInteger` for binary or hex literals.~~ If the value is outside `long` range (for hex and binary) or `double` range (for base 10), the parse will fail; higher values must be explicitly requested using the `n`/`N` BigInteger suffix.

---

*This is a breaking change* as binary literals are now read as numbers instead of generic tokens which could potentially have been used as function / cmdlet names or file names.

Notes:
* Binary literal support was approved by the committee in #7557 
* ~~The same issue is still under further discussion for underscore support in numeric literals and whether BigInteger parsing ought to be exposed to the user at all.~~
    * ~~Supporting underscore literals is a further breaking change causing some generic tokens like `1_000_000` to be read as numerals instead.~~ Per @SteveL-MSFT's [comment](https://github.com/PowerShell/PowerShell/pull/7993#issuecomment-442651543) this proposal was rejected.
    * ~~Removing underscore support or preventing standard parsing from accepting BigInteger ranges is a relatively trivial matter. It is my personal opinion that there is no particular reason *not* to hand the user a BigInteger when they enter a sufficiently large literal, but I will defer to the PowerShell Committee's judgement on this.~~
2019-04-03 15:10:02 -07:00
Staffan Gustafsson 42c289fc8e Improve formatting performance by having better primitives on PSObject (#8785)
By not doing excessive amounts of extra work, formatting can be sped up quite significantly (about 8x faster).
The main change comes from adding new, more efficient, primitive to query an object for the existence of an instance member.
The formatting system has been checking for if an object has properties other than some decorated properties added by PS remoting, and it doesn't this by retrieving all properties which results in heavy allocations and wasted cycles.
By adding `GetFirstOrDefault` to `PSObject` and similar primitives to the underlying Adapters, we are able to return early, without having to get all properties back.
2019-03-20 18:43:52 -07:00
Patrick Meinecke b4ebf63335 Improve type inference of array literals and foreach statement variables (#8100)
Improve type inference for foreach statement variables by:

Inferring strongly typed arrays from explicit array and array literal expressions when elements are of the same inferred type

Fix detection of foreach variable declaration. The previous logic was to check if the variable expression's start offset was after the end offset of the foreach statement, which will never be true in the body

Improve inference of what type the "Condition" of a foreach statement will enumerate as
2019-03-19 13:36:27 -07:00
Ilya ba60904350 Get MethodInfo from .NET public type with explicit parameter types (#9029) 2019-03-09 19:05:10 -08:00
Ilya 759c4abde8 Use Type.EmptyTypes and Array.Empty<T>() to replace our custom code of the same functionality (#9042) 2019-03-09 17:53:31 -08:00
Travis Plunk 8a877d6160 Merge branch 'release/v6.2.0-rc.1' into master
# Conflicts:
#	src/System.Management.Automation/engine/parser/Compiler.cs
2019-03-05 11:13:22 -08:00
Ilya 7ed35e3494 Remove unused cached types from CachedReflectionInfo (#9019) 2019-03-01 23:08:44 +05:00
Aditya Patwardhan b2a8a733de Remove unused cached types (#9015)
These types are not used in PowerShell code base and should be removed.

## PR Context

The dotnet 3.0.100-preview3-010406 version added overloads to `string.get_Chars` and hence we cannot resolved which overload to load. Thus, we get an type load exception.

Since we are no using this type, it is better to remove it.
2019-02-28 17:28:44 -08:00
Aditya Patwardhan cae9e952b5 Remove unused cached types (#9015)
These types are not used in PowerShell code base and should be removed.

## PR Context

The dotnet 3.0.100-preview3-010406 version added overloads to `string.get_Chars` and hence we cannot resolved which overload to load. Thus, we get an type load exception.

Since we are no using this type, it is better to remove it.
2019-02-28 17:13:39 -08:00
Travis Plunk 57aeca428e Port Security bypass fixes from 6.1.3 (#8915) 2019-02-21 13:44:08 -08:00
Mathias R. Jessen 0a570211df Flatten interface hierarchy when generating properties that implement interface properties (#8382)
`TypeBuilder.GetInterfaces()` returns only the interfaces that was explicitly passed to its constructor, so we need to flatten the interface hierarchy in order to properly support inherited interfaces.
2019-02-19 15:02:34 -08:00
Joel Sallow (/u/ta11ow) 130298bfae Parse numeric strings as numbers again during conversions (#8681) 2019-02-04 12:22:05 -08:00
xtqqczze 863528881f Use https in URLs where available (#8622)
Use https in URLS across the repository where the domain serves content by https.
2019-01-24 12:50:11 -08:00